@深巷
2年前 提问
1个回答

文件上传漏洞的类型有哪些

Ann
2年前

文件上传漏洞的类型有以下这些:

  • 前端js绕过类型:在文件上传时,用户选择文件时,或者提交时,有些网站会对前端文件名进行验证,一般检测后缀名,是否为上传的格式。如果上传的格式不对,则弹出提示文字。此时数据包并没有提交到服务器,只是在客户端通过js文件进行校验,验证不通过则不会提交到服务器进行处理。

  • 修改content-type绕过类型:有些上传模块,会对http类型头进行检测,如果是图片类型,允许上传文件到服务器,否则返回上传失败,因为服务端是通过content-type判断类型,content-type在客户端可被修改。

  • 绕黑名单类型:上传模块,有时候会写成黑名单限制,在上传文件的时获取后缀名,再把后缀名与程序中黑名单进行检测,如果后缀名在黑名单的列表内,文件将禁止文件上传。

  • htaccess重写解析绕过类型:上传模块,黑名单过滤了所有的能执行的后缀名,如果允许上传.htaccess。htaccess文件的作用是:可以帮我们实现包括:文件夹密码保护、用户自动重定向、自定义错误页面、改变你的文件扩展名、封禁特定IP地址的用户、只允许特定IP地址的用户、禁止目录列表,以及使用其他文件作为index文件等一些功能。在htaccess里写入SetHandler application/x-httpd-php则可以文件重写成php文件。要htaccess的规则生效,则需要在apache开启rewrite重写模块,因为apache是多数都开启这个模块,所以规则一般都生效。

  • 大小写绕过类型:有的上传模块 后缀名采用黑名单判断,但是没有对后缀名的大小写进行严格判断,导致可以更改后缀大小写可以被绕过,如PHP、Php、phP、pHp。

  • 配合其他漏洞绕过类型:服务器本身存在一些其他类型的漏洞,如文件包含漏洞、Apache域名解析漏洞等,直接借助该类型的漏洞实现忘记文件上传,也可以直接包含一些不符合服务器原有命名规则的文件实现文件上传。

服务器预防文件上传攻击方法有以下这些:

  • 文件上传的目录设置为不可执行:最有效的,将文件上传目录直接设置为不可执行,对于Linux而言,撤销其目录的’x’权限;实际中很多大型网站的上传应用都会放置在独立的存储上作为静态文件处理,一是方便使用缓存加速降低能耗,二是杜绝了脚本执行的可能性。

  • 判断文件类型:在判断文件类型时,可以结合使用MIME Type、后缀检查等方式。在文件类型检查中,强烈推荐白名单方式,黑名单的方式已经无数次被证明是不可靠的。此外,对于图片的处理,可以使用压缩函数或者resize函数,在处理图片的同时破坏图片中可能包含的HTML代码

  • 使用随机数改写文件名和文件路径:文件上传如果要执行代码,则需要用户能够访问到这个文件。在某些环境中,用户能上传,但不能访问。如果应用了随机数改写了文件名和路径,将极大地增加攻击的成本。再来就是像shell.php.rar.rar和crossdomain.xml这种文件,都将因为重命名而无法攻击。

  • 单独设置文件服务器的域名:由于浏览器同源策略的关系,一系列客户端攻击将失效,比如上传crossdomain.xml、上传包含Javascript的XSS利用等问题将得到解决

  • 定期进行漏洞扫描:定期对服务器进行安全漏洞扫描,及时发现服务器内部存在的漏洞,并将这些漏洞进行修补,防止攻击者利用这些漏洞实施攻击。